با توجه به داده بانک جهانی به سوالات زیر پاسخ دهید. برای استفاده از داده از سه فایل زیر استفاده نمایید. داده نام کشورها: WDICountry داده نام سری های زمانی: WDISeries داده کل: WDIData در صورتی که داده را در اختیار ندارید می توانید از بسته WDI استفاده نموده و داده های مورد نظر را استخراج نمایید.
بارگذاری داده ها و کتابخانه ها:
library(readr)
library(dplyr)
library(ggplot2)
library(highcharter)
library(stringr)
wdi_data = read_csv('data/WDIData.csv')
۱. ده کشور فقیر دنیا را بیابید. نمودار درآمد روزانه آنها را رسم کنید. چند درصد از اعضای این کشورها زیر خط فقر هستند؟ متوسط عمر در این کشورها چقدر است؟
برای حل این سوال ابتدا ستون های مورد نظر را برای سال ۲۰۱۶ پیدا می کنیم. فقط از آنجایی که خط فقر NA زیادی داشت از سال ۲۰۱۴ آن استفاده می کنیم. سپس بر اساس فقر مرتب کرده و ده کشور فقیر را انتخاب می کنیم. سپس خط فقر و امید به زندگی را رسم می کنیم. در نهایت نمودار را رسم می کنیم.
poverty <- wdi_data %>% filter(`Indicator Code`== 'NY.GDP.PCAP.PP.CD') %>%
select(country = `Country Name`, poverty = `2016`)
income <- wdi_data %>% filter(`Indicator Code`== 'NY.ADJ.NNTY.CD') %>%
select(country = `Country Name`, income = `2016`)
poverty_line <- wdi_data %>% filter(`Indicator Code`== 'SI.POV.NAHC') %>%
select(country = `Country Name`, poverty_line = `2014`)
life_expectancy <- wdi_data %>% filter(`Indicator Code`== 'SP.DYN.LE00.IN') %>%
select(country = `Country Name`, life_expectancy = `2016`)
population <- wdi_data %>% filter(`Indicator Code`== 'SP.POP.TOTL') %>%
select(country = `Country Name`, population = `2016`)
poverty <- poverty %>% inner_join(income, by = c("country")) %>%
inner_join(population, by = c("country")) %>%
inner_join(poverty_line, by = c("country")) %>%
inner_join(life_expectancy, by = c("country")) %>%
arrange(poverty) %>%
mutate(daily_income = income/(365*population)) %>%
slice(1:10)
knitr::kable(poverty)| country | poverty | income | population | poverty_line | life_expectancy | daily_income |
|---|---|---|---|---|---|---|
| Central African Republic | 698.7067 | 1374375431 | 4594621 | NA | 52.171 | 0.8195262 |
| Burundi | 777.7529 | 2122720795 | 10524117 | 64.9 | 57.481 | 0.5526044 |
| Congo, Dem. Rep. | 801.6301 | 26138587178 | 78736153 | NA | 59.621 | 0.9095259 |
| Liberia | 812.6739 | 1112973037 | 4613823 | 54.1 | 62.505 | 0.6608925 |
| Niger | 986.2070 | 6041624602 | 20672987 | 44.5 | 60.058 | 0.8006775 |
| Malawi | 1168.8256 | 3635417843 | 18091575 | NA | 63.223 | 0.5505352 |
| Mozambique | 1216.7928 | 8566275076 | 28829476 | 46.1 | 58.311 | 0.8140712 |
| Sierra Leone | 1476.2137 | 2676603250 | 7396190 | NA | 51.835 | 0.9914780 |
| Togo | 1490.5362 | 3020251309 | 7606374 | NA | 60.232 | 1.0878588 |
| Madagascar | 1506.2383 | 8910175309 | 24894551 | NA | 65.932 | 0.9805937 |
poverty %>% arrange(daily_income) %>%
hchart(type = "column", hcaes(x = country, y = daily_income)) %>%
hc_yAxis(title = list(text = "Daily Income")) %>%
hc_xAxis(title = list(text = "Country")) %>%
hc_title(text = "Daily Income in Poor Countries", style = list(fontWeight = "bold")) %>%
hc_add_theme(hc_theme_ffx())۲. تراژدی روآندا: بر اساس داده های امید به زندگی ابتدا نمودار سالانه نمودار جعبه ایی امید به زندگی کشورها را رسم نمایید(در یک نمودار!). سپس سری زمانی امید به زندگی روآندا را به آن اضافه کنید. چه می بینید؟ چند میلیون نفر کشته شدند؟
برای حل این سوال، امید به زندگی را در تمامی سال ها بدست می آوریم. سپس نمودار را از ستونی به ردیفی به کمک melt تبدیل می کنیم. در نهایت نمودار جعبه را می کشیم.
library(reshape2)
life_expectancy <- wdi_data %>% filter(`Indicator Code`== 'SP.DYN.LE00.IN') %>%
select(country = `Country Name`, matches('\\d{4}')) %>%
melt(id.vars=c('country'))
rwd_life_expectancy <- life_expectancy %>% filter(country == 'Rwanda')p = ggplot(data = life_expectancy, mapping = aes(x = variable, y = value)) + geom_boxplot() +
geom_line(data = rwd_life_expectancy, mapping = aes(x = variable, y = value, group = 1, color = 'Rwanda')) +
xlab("Year") + ylab("Life Expectancy") + ggtitle("Average Life Expectancy Worldwide") +
theme(axis.text.x = element_text(angle = 90, hjust = 1))
pمشاهده می کنیم که در این سال ها امید به زندگی در روآندا با اختلاف از سایر کشورها کمتر است که علت آن نسل کشی توسط دولت بوده است. همچنین در زیر می بینیم که یک میلیون نفر در این دوران کشته شده اند.
rwd_death <- wdi_data %>% filter(`Indicator Code`== 'SP.DYN.CDRT.IN') %>%
select(country = `Country Name`, matches('\\d{4}')) %>% filter(country == 'Rwanda') %>%
melt(id.vars=c('country')) %>% filter(!is.na(value)) %>%
summarise(tot_death = 1000*sum(value))
cat("Total Death in Rwanda is", rwd_death[1,], "people.")Total Death in Rwanda is 1053185 people.
۳. نمودار امید به زندگی و هزینه های بهداشتی را رسم کنید. چه نتیجه ایی می گیرید؟
برای حل این سوال همانند بالا داده را در باره ی هزینه های بهداشتی نیز بدست می آوریم، منتهی برای آنکه رنج آن با امید به زندگی قابل مقایسه باشد داده ها را به ۱۰۰ تقسیم می کنیم و دو نمودار را کنار یکدیگر رسم می کنیم.
health <- wdi_data %>% filter(`Indicator Code`== 'SH.XPD.CHEX.PC.CD') %>%
select(country = `Country Name`, matches('\\d{4}')) %>%
melt(id.vars=c('country')) %>%
mutate(value = value/100, type = 'health') %>%
filter(!is.na(value))
life_expectancy <- life_expectancy %>% filter(!is.na(value)) %>% mutate(type = 'life expectancy')
health_expect <- health %>% rbind(life_expectancy)
p = ggplot(data = health_expect, mapping = aes(x = variable, y = value, fill = type, color = type)) + geom_boxplot() +
xlab("Year") + ylab("Life Expectancy or Health Cost") + ggtitle("Average Life Expectancy and Health Cost Worldwide") +
theme(axis.text.x = element_text(angle = 90, hjust = 1)) همانطور که انتظار می رود، هر چه امید به زندگی به طور میانگین بالا می رود، میزان هزینه های بهداشتی و اهمیت افراد به بهداشت خود نیز افزایش پیدا می کند.
۴. آیا قدرت خرید خانواده های ایرانی در ۵۰ سال اخیر افزایش یافته است؟ برای این کار از داده های اقتصادی خانوار استفاده کنید.
برای این سوال همانند سوال بالا ردیف مناسب با ستون های مناسب را به ازای تمامی سال ها برای ایران بدست می آوریم و نمودار را می کشیم.
iran_buy_cap <- wdi_data %>% filter(`Indicator Code`== 'NY.GDP.PCAP.PP.CD') %>%
select(country = `Country Name`, matches('\\d{4}')) %>%
filter(country == 'Iran, Islamic Rep.') %>%
melt(id.vars=c('country')) %>%
filter(!is.na(value))
iran_buy_cap %>% arrange(variable) %>%
hchart(type = "line", hcaes(x = variable, y = value)) %>%
hc_yAxis(title = list(text = "Purchasing Capability")) %>%
hc_xAxis(title = list(text = "Year")) %>%
hc_title(text = "Purchasing Capability in Iran", style = list(fontWeight = "bold")) %>%
hc_add_theme(hc_theme_economist())همانطور که می بینیم قدرت خرید در ایران زیاد شده است، اما در پایان سال ۲۰۱۲ که با پایان دولت قبلی همزمان است، میزان قدرت خرید به علت اختلاس ها و عدم کنترل وضعیت اقتصادی افت کرده است.
۵. رشد اقتصادی ایران را با کشورهای دیگر در طول ۲۰ سال گذشته بر حسب بیست شاخص های اقتصادی مهم مانند تولید ناخالص ملی، تورم و … ارزیابی کنید! (برای هر شاخص از تصویرسازی استفاده کنید.)
برای حل این سوال ۲۰ معیاری که مقادیر NA کمتری دارد را می یابیم و در حل مرحله داده ی جهانی را با ایران مقایسه می کنیم. نام شاخص در عنوان خطوط نمودار آمده است. البته مشاهده می کنیم که دو نمودار تقریبا داده ای ندارند.
world_ec <- wdi_data %>% filter(`Indicator Code`== 'NE.EXP.GNFS.CD') %>%
select(country = `Country Name`, index = `Indicator Name`, matches('^199[6-9]|^20[0-1][0-9]')) %>%
rbind(wdi_data %>% filter(`Indicator Code`== 'NY.GDP.PCAP.CD') %>%
select(country = `Country Name`, index = `Indicator Name`, matches('^199[6-9]|^20[0-1][0-9]'))) %>%
rbind(wdi_data %>% filter(`Indicator Code`== 'NY.GNP.MKTP.CD') %>%
select(country = `Country Name`, index = `Indicator Name`, matches('^199[6-9]|^20[0-1][0-9]'))) %>%
rbind(wdi_data %>% filter(`Indicator Code`== 'NE.GDI.FTOT.KD.ZG') %>%
select(country = `Country Name`, index = `Indicator Name`, matches('^199[6-9]|^20[0-1][0-9]'))) %>%
rbind(wdi_data %>% filter(`Indicator Code`== 'BX.KLT.DINV.CD.WD') %>%
select(country = `Country Name`, index = `Indicator Name`, matches('^199[6-9]|^20[0-1][0-9]'))) %>%
rbind(wdi_data %>% filter(`Indicator Code`== 'BM.GSR.GNFS.CD') %>%
select(country = `Country Name`, index = `Indicator Name`, matches('^199[6-9]|^20[0-1][0-9]'))) %>%
rbind(wdi_data %>% filter(`Indicator Code`== 'BN.GSR.FCTY.CD') %>%
select(country = `Country Name`, index = `Indicator Name`, matches('^199[6-9]|^20[0-1][0-9]'))) %>%
rbind(wdi_data %>% filter(`Indicator Code`== 'FP.CPI.TOTL.ZG') %>%
select(country = `Country Name`, index = `Indicator Name`, matches('^199[6-9]|^20[0-1][0-9]'))) %>%
rbind(wdi_data %>% filter(`Indicator Code`== 'FM.LBL.BMNY.GD.ZS') %>%
select(country = `Country Name`, index = `Indicator Name`, matches('^199[6-9]|^20[0-1][0-9]'))) %>%
rbind(wdi_data %>% filter(`Indicator Code`== 'NV.AGR.TOTL.ZS') %>%
select(country = `Country Name`, index = `Indicator Name`, matches('^199[6-9]|^20[0-1][0-9]'))) %>%
rbind(wdi_data %>% filter(`Indicator Code`== 'NE.CON.TETC.ZS') %>%
select(country = `Country Name`, index = `Indicator Name`, matches('^199[6-9]|^20[0-1][0-9]'))) %>%
rbind(wdi_data %>% filter(`Indicator Code`== 'NE.CON.GOVT.ZS') %>%
select(country = `Country Name`, index = `Indicator Name`, matches('^199[6-9]|^20[0-1][0-9]'))) %>%
rbind(wdi_data %>% filter(`Indicator Code`== 'NV.IND.MANF.ZS') %>%
select(country = `Country Name`, index = `Indicator Name`, matches('^199[6-9]|^20[0-1][0-9]'))) %>%
rbind(wdi_data %>% filter(`Indicator Code`== 'MS.MIL.XPND.GD.ZS') %>%
select(country = `Country Name`, index = `Indicator Name`, matches('^199[6-9]|^20[0-1][0-9]'))) %>%
rbind(wdi_data %>% filter(`Indicator Code`== 'TG.VAL.TOTL.GD.ZS') %>%
select(country = `Country Name`, index = `Indicator Name`, matches('^199[6-9]|^20[0-1][0-9]'))) %>%
rbind(wdi_data %>% filter(`Indicator Code`== 'NY.GDP.TOTL.RT.ZS') %>%
select(country = `Country Name`, index = `Indicator Name`, matches('^199[6-9]|^20[0-1][0-9]'))) %>%
rbind(wdi_data %>% filter(`Indicator Code`== 'NE.TRD.GNFS.ZS') %>%
select(country = `Country Name`, index = `Indicator Name`, matches('^199[6-9]|^20[0-1][0-9]'))) %>%
rbind(wdi_data %>% filter(`Indicator Code`== 'FS.AST.DOMS.GD.ZS') %>%
select(country = `Country Name`, index = `Indicator Name`, matches('^199[6-9]|^20[0-1][0-9]'))) %>%
rbind(wdi_data %>% filter(`Indicator Code`== 'NY.GNP.MKTP.PP.CD') %>%
select(country = `Country Name`, index = `Indicator Name`, matches('^199[6-9]|^20[0-1][0-9]'))) %>%
rbind(wdi_data %>% filter(`Indicator Code`== 'SH.UHC.NOP1.TO') %>%
select(country = `Country Name`, index = `Indicator Name`, matches('^199[6-9]|^20[0-1][0-9]'))) %>%
melt(id.vars=c('country', 'index')) %>%
filter(!is.na(value)) %>%
group_by(index)
plots <- world_ec %>%
do(
plots = ggplot(.,aes(x = variable, y = value, color = index)) + geom_boxplot() +
xlab("Year") + ggtitle("Worldwide Economic vs. Iran") +
theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
geom_line(data = subset(.,country == 'Iran, Islamic Rep.'),aes(x = variable, y = value, group = 1, color = 'Iran, Islamic Rep.'))
)
plots$plots[[1]]
[[2]]
[[3]]
[[4]]
[[5]]
[[6]]
[[7]]
[[8]]
[[9]]
[[10]]
[[11]]
[[12]]
[[13]]
[[14]]
[[15]]
[[16]]
[[17]]
[[18]]
[[19]]
[[20]]
همانطور که در نمودارها می بینیم، ایران تقریبا بر روی میانگین کشورها قرار دارد، اما مقادیری همچون هزینه ی مصرف نهایی از کشورهای دیگر بسیار کمتر است و سرمایه گذاری در خارج آن صفر است. هم چنین میزان تجارت از میانگین کمتر است و میزان اجاره ی منابع طبیعی بسیار بیشتر از سایر کشورها است. در کل ایران اقتصادی متوسط رو به پایین دارد.
۶. در قسمت قبل با استفاده از روش خوشه بندی k-means داده ها را به سه دسته تقسیم کنید. ایران در کدام دسته می گنجد؟ (پیش از خوشه بندی طبیعتا داده را باید پاکسازی و استاندارد سازی نمایید.)
۷. به وسیله تحلیل مولفه اصلی بعد داده رو به دو کاهش دهید سپس خوشه های به دست آمده در قسمت قبل را بر روی آن نمایش دهید. آیا عملکرد روش خوشه بندی شما مطلوب بوده است؟
۸. با استفاده از داده روشی برای پیش بینی رشد اقتصادی ایران در سال آینده ارائه دهید.
۹. سوالهای ۵ تا ۷ را ابتدا برای ۲۰ شاخص سلامت سپس بر حسب ۲۰ شاخص آموزشی تکرار کنید.
۱۰. کشورهای دنیا را بر حسب ۶۰ شاخص اقتصادی، سلامت و آموزش با روش سلسله مراتبی خوشه بندی کرده و دندروگرام آن را رسم نمایید. اگر داده ها بر سه دسته تقسیم شوند ایران در کدام دسته می گنجد؟
۱۱. سه یافته جالب از داده ها استخراج کنید.